<?php

namespace Frontend\Controllers;

use \COM;
use Models\Documents;
use Models\Topics;
use Models\Doctypes;
use Models\Users;
use Models\Downloads;

class DocController extends ControllerBase {

    public function indexAction() {
        
    }

    public function viewAction() {
        $id = $this->dispatcher->getParam("id");
        $doc = Documents::findFirstById($id);
        if ($doc) {
            $this->view->doc = $doc;
            $topic = Topics::findFirstById($doc->topic_id);
            $this->view->topic = $topic;
            $type = Doctypes::findFirstById($topic->doctype_id);
            $this->view->type = $type;
            $user = Users::findFirstById($doc->uploadby);
            $this->view->user = $user;
        } else {
            $this->dispatcher->forward(array(
                'module' => 'frontend',
                'controller' => 'error',
                'action' => 'notAvailable'
            ));
        }
        $text_relate = $doc->topic_id;
        $query = $this->modelsManager->createBuilder()
                ->columns(array(
                    'Models\Documents.id',
                    'Models\Documents.title',
                    'Models\Documents.description',
                    'Models\Documents.submit_date',
                    'Models\Documents.cost',
                    'Models\Documents.link',
                    'Models\Documents.image',
                    'Models\Documents.topic_id',
                    'Models\Documents.download',
                    'Models\Documents.discount',
                    'Topics.name TopicName',
                ))
                ->from('Models\Documents')
                ->leftjoin('Models\Topics', 'Topics.id = Models\Documents.topic_id', 'Topics')
                ->where("Models\Documents.topic_id = $text_relate")
                ->andwhere('Models\Documents.public = 1');
        $docs = $query->getQuery()->execute();
        $this->view->docs = $docs;
        $types = Doctypes::find();
        $this->view->types = $types;
    }

    public function getlinkAction() {
        $id = $this->request->getPost('id');
        $doc = Documents::findFirstById($id);
        $this->view->disable();
        $identity = $this->auth->getIdentity();
        $user = Users::findFirstById($identity['id']);
        if ($user) {
            if (!$doc) {
                echo '<div class="unavailable">Tài liệu không tồn tại</div>';
                return;
            }
             if ($user->balance < $doc->cost) {
                echo '<div class="balancefail">Tài khoản của bạn không đủ để tải tài liệu này, vui lòng <a href="' . $this->url->get("recharge") . '">nạp thêm</a>  để download tài liệu!</div>';
                return;
            }
            if ($doc->doctype_id == '1' && date($user->expired) <= date('Y-m-d')) {
                echo '<div class="expired">Tài khoản của bạn đã hết hạn tải tài liệu, vui lòng <a href="' . $this->url->get("recharge") . '">nạp thêm</a>  để download tài liệu này!</div>';
                return;
            }           
            echo '<div class="downloadspan">'
            . '<span>Tài liệu này có giá ' . $doc->cost . ' Xu</span><br/>'
            . '<span>Link tải tài liệu <a href="' . $this->url->get("doc/download/$id") . '"> tại đây</a> !</span>'
            . '</div>';
        } else {
            echo '<div class="loginmessage">Bạn cần <a href="' . $this->url->get("login?url=/vids/doc/view/$id") . '">đăng nhập</a> để download tài liệu này<div>';
            return;
        }
    }

    public function downloadAction($id) {
        $identify = $this->auth->getIdentity();
        $user = Users::findFirstById($identify['id']);
        $doc = Documents::findFirstById($id);
        if (!$user) {
            return $this->dispatcher->forward(array(
                        'module' => 'frontend',
                        'controller' => 'user',
                        'action' => 'login',
            ));
        }
        if ($doc) {
            if ($doc->doctype_id == '1' && date($user->expired) <= date('Y-m-d')) {
                $this->flash->error('Tài khoản của bạn đã hết hạn, vui lòng nạp thêm để download tài liệu này!');
                return;
            }
            $topic = Topics::findFirstById($doc->topic_id);
            if ($doc->cost > $user->balance) {
                $this->dispatcher->forward(array(
                    'module' => 'frontend',
                    'controller' => 'doc',
                    'action' => 'view',
                    'params' => array(
                        'id' => $id,
                    ),
                ));
                $this->flash->error('Tài khoản của bạn không đủ để tải tài liệu này!');
            } else {
                $url = UPLOAD_DIR . $topic->doctype_id . '/' . $topic->id . '/' . $doc->id . '/' . $doc->link;
                if (file_exists($url)) {
                    $doc->download +=1;
                    $doc->save();
                    $user->balance -= $doc->cost;
                    $user->save();
                    $upuser = Users::findFirstById($doc->uploadby);
                    $upuser->points += 1;
                    $upuser->save();
                    $download = new Downloads();
                    $download->assign(array(
                        'doc_id' => $doc->id,
                        'user_id' => $user->id,
                        'time' => date('Y-m-d H:i:s'),
                        'ip' => $this->request->getClientAddress(),
                        'userAgent' => $this->request->getUserAgent(),
                    ));
                    $download->save();

                    header("Content-Description: File Transfer");
                    header("Content-Disposition: attachment; filename=" . basename($url));
                    header("Content-Type: application/zip");
                    header("Content-Transfer-Encoding: binary");

                    readfile($url);
                    exit;
                } else {
                    $this->dispatcher->forward(array(
                        'module' => 'frontend',
                        'controller' => 'doc',
                        'action' => 'view',
                        'params' => array(
                            'id' => $doc->id
                        )
                    ));
                    $this->flash->error('Tài liệu không tồn tại hoặc đã bị xóa!');
                }
            }
        } else {
            $this->dispatcher->forward(array(
                'module' => 'frontend',
                'controller' => 'error',
                'action' => 'notAvailable'
            ));
        }
    }

    public function convertAction() {
        $word = new COM("Word.Application") or die("Could not initialise Object.");
        // set it to 1 to see the MS Word window (the actual opening of the document)
        $word->Visible = 0;
        // recommend to set to 0, disables alerts like "Do you want MS Word to be the default .. etc"
        $word->DisplayAlerts = 0;
        // open the word 2007-2013 document 
        $word->Documents->Open('yourdocument.docx');
        // save it as word 2003
        $word->ActiveDocument->SaveAs('newdocument.doc');
        // convert word 2007-2013 to PDF
        $word->ActiveDocument->ExportAsFixedFormat('yourdocument.pdf', 17, false, 0, 0, 0, 0, 7, true, true, 2, true, true, false);
        // quit the Word process
        $word->Quit(false);
        // clean up
        unset($word);
    }

}
